package org.aeon.service;


import org.aeon.entity.ChatGroup;
import org.aeon.entity.dto.ChatGroupDto;
import org.aeon.entity.dto.GroupInfoDto;

import java.util.List;

/**
 * 聊天群
 *
 * @author MissingAeon
 * @email nian0950@qq.com
 * @date 2024-01-25 17:39:34
 */
public interface ChatGroupService {
    /**
     * 通过用户id获取创建的组
     *
     * @param userId
     * @return
     */
    List<ChatGroupDto> getGroupsByUserId(Long userId);

    /**
     * 通过群聊id获取所有群聊
     *
     * @param groupIds
     * @return
     */
    List<ChatGroupDto> getGroupsByIds(List<Long> groupIds);

    /**
     * 通过群聊名称获取id
     *
     * @param groupName
     * @return
     */
    Long getChatGroupId(String groupName);

    /**
     * 判断组名是否重复
     *
     * @param groupName
     * @return
     */
    boolean isChatGroupExist(String groupName);

    /**
     * 判断组是否存在
     *
     * @param groupId
     * @return
     */
    boolean isChatGroupExist(Long groupId);

    /**
     * 获取群聊实体
     *
     * @param groupName
     * @return
     */
    ChatGroup getChatGroup(String groupName);

    /**
     * 获取群聊实体
     *
     * @param groupId
     * @return
     */
    ChatGroup getChatGroup(Long groupId);

    /**
     * 创建群聊
     *
     * @param groupName 组名
     * @param userId    群主id
     * @return
     */
    ChatGroup insertChatGroup(String groupName, Long userId);

    /**
     * 更新组员成员数量
     *
     * @param groupId
     * @param number
     */
    int updateGroupNumberOfMembers(Long groupId, int number);

    /**
     * 是否为群主
     *
     * @param groupId
     * @param userId
     * @return
     */
    boolean isCreator(Long groupId, Long userId);

    /**
     * 删除群聊（解散群聊）
     *
     * @param groupId
     * @return
     */
    int deleteGroup(Long groupId);

    /**
     * 模糊搜索
     *
     * @param keyword
     * @return
     */
    List<ChatGroupDto> fuzzySearch(String keyword);

    GroupInfoDto getChatGroupInfo(Long groupId);
}

